Loading Libraries and Getting ticker info

library(plotly)
library(quantmod)
library(TTR)
library(tidyverse)
getSymbols("GME", source = 'yahoo')
[1] "GME"

Cleaning Data and Generating Signals

df <- data.frame(Date = index(GME), coredata(GME))

df <- df %>%
        mutate(movement = if_else(GME.Close >= GME.Open, "Increasing", "Decreasing")) %>%
        mutate(avg_30 = SMA(GME.Close, n = 30),
               avg_90 = SMA(GME.Close, n = 90)) %>%
        mutate(good_signal = if_else(avg_30 >= avg_90, 1, 0)) %>%
        mutate(buy = if_else(good_signal - lag(good_signal) == 1, 1, 0),
               sell = if_else(good_signal - lag(good_signal) == -1, 1, 0)) %>%
        filter(Date >= "2020/06/01")

buys <- df %>%
        filter(buy == 1)

sell <- df %>%
        filter(sell == 1)

Writing the Plotly graph

i <- list(line = list(color = 'black'))
d <- list(line = list(color = 'red'))

fig <- df %>%
        plot_ly(x = ~Date, type = "candlestick",
                open = ~GME.Open, close = ~GME.Close,
                high = ~GME.High, low = ~GME.Low, name = "GME",
                increasing = i, decreasing = d, width = 800, height = 500) %>%
        add_lines(y = ~avg_30, name = "Closing 30D MvgAvg",
                  line = list(color = 'cadetblue')) %>%
        add_lines(y = ~avg_90, name = "Closing 90D MvgAvg",
                  line = list(color = 'blue')) %>%
        add_segments(x = buys$Date, xend = buys$Date, y = 0, yend = 500, line = list(color = "green"), name = "Buy Signal") %>%
        add_segments(x = sell$Date, xend = sell$Date, y = 0, yend = 500, line = list(color = "orange"), name = "Sell Signal") %>%
        layout(yaxis = list(title = "Price"))
        

The graph

LS0tDQp0aXRsZTogIlBlcmZvcm1hbmNlIG9mIEdNRSINCmRhdGU6ICIxMC8yOC8yMDIxIg0Kb3V0cHV0Og0KICBzbGlkeV9wcmVzZW50YXRpb246IGRlZmF1bHQNCi0tLQ0KDQojIExvYWRpbmcgTGlicmFyaWVzIGFuZCBHZXR0aW5nIHRpY2tlciBpbmZvDQoNCmBgYHtyLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2U9IEZBTFNFfQ0KbGlicmFyeShwbG90bHkpDQpsaWJyYXJ5KHF1YW50bW9kKQ0KbGlicmFyeShUVFIpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmBgYA0KDQpgYGB7cn0NCmdldFN5bWJvbHMoIkdNRSIsIHNvdXJjZSA9ICd5YWhvbycpDQpgYGANCg0KIyBDbGVhbmluZyBEYXRhIGFuZCBHZW5lcmF0aW5nIFNpZ25hbHMNCmBgYHtyfQ0KZGYgPC0gZGF0YS5mcmFtZShEYXRlID0gaW5kZXgoR01FKSwgY29yZWRhdGEoR01FKSkNCg0KZGYgPC0gZGYgJT4lDQogICAgICAgIG11dGF0ZShtb3ZlbWVudCA9IGlmX2Vsc2UoR01FLkNsb3NlID49IEdNRS5PcGVuLCAiSW5jcmVhc2luZyIsICJEZWNyZWFzaW5nIikpICU+JQ0KICAgICAgICBtdXRhdGUoYXZnXzMwID0gU01BKEdNRS5DbG9zZSwgbiA9IDMwKSwNCiAgICAgICAgICAgICAgIGF2Z185MCA9IFNNQShHTUUuQ2xvc2UsIG4gPSA5MCkpICU+JQ0KICAgICAgICBtdXRhdGUoZ29vZF9zaWduYWwgPSBpZl9lbHNlKGF2Z18zMCA+PSBhdmdfOTAsIDEsIDApKSAlPiUNCiAgICAgICAgbXV0YXRlKGJ1eSA9IGlmX2Vsc2UoZ29vZF9zaWduYWwgLSBsYWcoZ29vZF9zaWduYWwpID09IDEsIDEsIDApLA0KICAgICAgICAgICAgICAgc2VsbCA9IGlmX2Vsc2UoZ29vZF9zaWduYWwgLSBsYWcoZ29vZF9zaWduYWwpID09IC0xLCAxLCAwKSkgJT4lDQogICAgICAgIGZpbHRlcihEYXRlID49ICIyMDIwLzA2LzAxIikNCg0KYnV5cyA8LSBkZiAlPiUNCiAgICAgICAgZmlsdGVyKGJ1eSA9PSAxKQ0KDQpzZWxsIDwtIGRmICU+JQ0KICAgICAgICBmaWx0ZXIoc2VsbCA9PSAxKQ0KDQpgYGANCg0KIyBXcml0aW5nIHRoZSBQbG90bHkgZ3JhcGgNCmBgYHtyfQ0KaSA8LSBsaXN0KGxpbmUgPSBsaXN0KGNvbG9yID0gJ2JsYWNrJykpDQpkIDwtIGxpc3QobGluZSA9IGxpc3QoY29sb3IgPSAncmVkJykpDQoNCmZpZyA8LSBkZiAlPiUNCiAgICAgICAgcGxvdF9seSh4ID0gfkRhdGUsIHR5cGUgPSAiY2FuZGxlc3RpY2siLA0KICAgICAgICAgICAgICAgIG9wZW4gPSB+R01FLk9wZW4sIGNsb3NlID0gfkdNRS5DbG9zZSwNCiAgICAgICAgICAgICAgICBoaWdoID0gfkdNRS5IaWdoLCBsb3cgPSB+R01FLkxvdywgbmFtZSA9ICJHTUUiLA0KICAgICAgICAgICAgICAgIGluY3JlYXNpbmcgPSBpLCBkZWNyZWFzaW5nID0gZCkgJT4lDQogICAgICAgIGFkZF9saW5lcyh5ID0gfmF2Z18zMCwgbmFtZSA9ICJDbG9zaW5nIDMwRCBNdmdBdmciLA0KICAgICAgICAgICAgICAgICAgbGluZSA9IGxpc3QoY29sb3IgPSAnY2FkZXRibHVlJykpICU+JQ0KICAgICAgICBhZGRfbGluZXMoeSA9IH5hdmdfOTAsIG5hbWUgPSAiQ2xvc2luZyA5MEQgTXZnQXZnIiwNCiAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ2JsdWUnKSkgJT4lDQogICAgICAgIGFkZF9zZWdtZW50cyh4ID0gYnV5cyREYXRlLCB4ZW5kID0gYnV5cyREYXRlLCB5ID0gMCwgeWVuZCA9IDUwMCwgbGluZSA9IGxpc3QoY29sb3IgPSAiZ3JlZW4iKSwgbmFtZSA9ICJCdXkgU2lnbmFsIikgJT4lDQogICAgICAgIGFkZF9zZWdtZW50cyh4ID0gc2VsbCREYXRlLCB4ZW5kID0gc2VsbCREYXRlLCB5ID0gMCwgeWVuZCA9IDUwMCwgbGluZSA9IGxpc3QoY29sb3IgPSAib3JhbmdlIiksIG5hbWUgPSAiU2VsbCBTaWduYWwiKSAlPiUNCiAgICAgICAgbGF5b3V0KHlheGlzID0gbGlzdCh0aXRsZSA9ICJQcmljZSIpKQ0KICAgICAgICANCmBgYA0KDQojIFRoZSBncmFwaA0KYGBge3IsIGVjaG8gPSBGLCBpbmNsdWRlPSBGfQ0KZmlnDQpgYGANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQo=